Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 64-битные числа в Carel Pco
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
rainproof
Доброго всем времени суток!

Суть вопроса:

Не могу придумать алгоритм преобразования 64-битного числа (последовательность из 8-ми байт) - в число с плавающей точкой.
Проблема в том, что на микропроцессорный промышленный контроллер (Carel PCO5) принимаются 8 байт данных от другого устройства по сети Modbus (каждый байт - передается как независимое число со своим индивидуальным "адресом"). Мне нужно эту последовательность байт - преобразовать в число с плавающей точкой, или просто в последовательность чисел "десятичных разрядов" для представления на экране, возможно даже с очень грубым округлением.
Ситуация усложняется тем, что передающее устройство (тепловодосчетчик) - поддерживает 64-битные числа аппаратно, а принимающее (Carel PCO5) - только 32-битные.

Основной вопрос, как реализовать такой алгоритм чисто с математической точки зрения:

- принять эту последовательность байтов как массив данных

- привести эти данные к числу с плавающей точкой, с наибольшей для 32-разрядной системы точностью.
Ashihara
Чисто математически рассчитать мантиссу и порядок. Вики в зубы и за калькулятор wink.gif
ktulu
"на микропроцессорный промышленный контроллер (Carel PCO5) принимаются 8 байт данных от другого устройства по сети Modbus (каждый байт - передается как независимое число со своим индивидуальным "адресом")"

..в ModBus нет понятия BYTE, есть только WORD_16 с этого начнем

"(Carel PCO5) принимаются 8 байт данных"
..CAREL мастер?, он запрашивает или как?

"Мне нужно эту последовательность байт"
..где вы видите последовательность байт?, если что я с CAREL не очень знаком, может там и так, но..

"что передающее устройство (тепловодосчетчик) - поддерживает 64-битные числа аппаратно"
..он может поддерживать хоть 256-битные "аппаратно", вопрос какой формат числа с точкой он использует? и как этот формат проецируется на ModBus пространство?
..без ответов на эти вопросы дальше что-то сказать сложно
ktulu
..я так понимаю вот с этим надо разбираться

https://en.wikipedia.org/wiki/Double-precis...ng-point_format
rainproof
Ответы на вопросы:
1. Контроллер Carel - мастер
2. 64-битное число с тепловодосчетчика принимается в виде 4-х переменных типа integer
Каждая из этих переменных - word (16 bit).
Под "последовательностью" - подразумеваю эти 4-ре word, которые по отдельности я принимаю на контроллер, и могу отобразить на экране, по отдельности.
Задача, которую не получается решить, следующая,
как обработать эти 4 переменных , чтобы "на выходе" получить переменные типа integer в таком виде:
int_0 = 1 * 10^0 (с диапазоном 0 - 999)
int_1 = 1 * 10^3 (с диапазоном 0 - 999)
int_2 = 1 * 10^6 (с диапазоном 0 - 999)
int_3 = 1 * 10^9 (с диапазоном 0 - 999)
чтобы можно было их расположить на экране для отображения 64-битного числа.
Вся сложность в том, что среда разработки 1Tool - не поддерживает 64-битные числа. только 32-бит.
LordN
вам надо не распологать их на экране, а выполнить преобразование 64 -> 32, и уже потом выводить
svintus
В 1Tool оперировать с 32-bit можно только в ST code, для вывода на экран потом все равно придется переводить в INT. Правильнее , наверное, будет упростить постановку задачи - из набора 4-х INT получить осмысленную комбинацию на выходе в виде другого набора INT. А использовать для этого ST или FBD, тут уж как удобнее.
LordN
https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%...%81%D1%82%D0%B8

судя по всему вам нужна эта формула

собрать по словам полученные восемь байт, разобрать на знак, порядок и мантиссу и собрать заново флоат 32

осталось понять каким байтом вперед выдвигается х64 и вперед.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.